/**
 * request 网络请求工具
 */
import { extend } from 'umi-request';
import { message, notification } from 'antd';

const BaseUrl = 'http://172.28.146.72:9100/sh_energy' || process.env.BaseUrl;
// console.log(process.env.COMPRESS, 'env');
const codeMessage: { [key: number]: any } = {
  // 200: '服务器成功返回请求的数据。',
  // 201: '新建或修改数据成功。',
  // 202: '一个请求已经进入后台排队（异步任务）。',
  // 204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};
const errCodeList = Object.keys(codeMessage).map((num) => {
  return Number(num);
});

/**
 * 异常处理程序
 */
const errorHandler = (error: any) => {
  console.log('请求错误处理', error.response);
  const { response = {} } = error;
  if (response && errCodeList.includes(response['status'])) {
    message.error(response.status + ' ' + codeMessage[response.status]);
  } else if (!response) {
    notification.error({
      description: '您的网络发生异常，无法连接服务器',
      message: '网络异常',
    });
  }
  throw error;
};

/**
 * 配置request请求时的默认参数
 */
const token =
  'e822e4d289c0f27f09f5a6b0461bfc0540c3ac4e0732be82a4ba33f3c0086bf2';
// const token = JSON.parse(sessionStorage.getItem('userData'))['token']
const Request = extend({
  timeout: 30000,
  credentials: 'include', // 默认请求是否带上cookie,
  headers: {
    'Content-Type': 'application/json;charset=utf-8',
    Accept: 'application/json',
    authorization: token,
  },
  errorHandler, // 默认错误处理
});
/* Request request 拦截器，改变url 或 options */
Request.interceptors.request.use((url: string, options: any): any => {
  // console.log(BaseUrl + url, 'url 地址！！！', options);
  // const headers = {
  //   'Content-Type': 'application/json;charset=utf-8',
  //   Accept: 'application/json',
  // }
  if (options?.requestType === 'form') {
    const token = options.headers.authorization;
    delete options.headers;
    options.headers = {
      authorization: token,
    };
  }
  try {
    // const token = JSON.parse(sessionStorage.getItem('userData'))['token']
    // options.headers['authorization: '] = token
    return {
      url: BaseUrl + url,
      options: {
        ...options,
      },
    };
  } catch (error) {
    message.error('token underfind');
  }
});
/* Request response 拦截器，处理response */
Request.interceptors.response.use(async (response: any) => {
  const res = await response.clone().json();
  // console.log('response 返回！！！', response, 222, res);
  if (response.status === 200 && res.code < 0) {
    notification.error({
      description: '发生了错误',
      message: res['message'] || '请求异常！',
    });
    // return res
    // return Promise.reject( res )
  } else {
    return response;
  }
});

export default Request;
